package com.mhg.spring_aop.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

@Component
@Aspect     //这是一个切面类（系统通用的功能）用户行为记录，基本在每个方法上都有需求
public class SpringAop {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 检查 @ActionRecord 加在了哪个方法上
     */
    @Pointcut("@annotation(com.mhg.spring_aop.anno.ActionRecord)")
    public void pointCut(){

    }


    /**
     * 前置通知(在调用系统的某个方法之前，触发这里)
     * @param joinPoint
     */
    @Before("pointCut()")
    public void before(JoinPoint joinPoint){
        //1.获取目标对象的方法名称
        String methodName = joinPoint.getSignature().getName();
        //2.获取方法参数
        Object[] args = joinPoint.getArgs();
//        System.out.println("方法名:"+methodName);
//        System.out.println("参数:"+ Arrays.toString(args));
//        ArrayList<String> arr = new ArrayList<>();
//        for (Object o : args){
//            String s = (String)o;
//            arr.add(s);
//        }
        //获取系统当前时间
        Date date = new Date();
        //格式化为字符串
        String now = sdf.format(date);
        if ("search".equals(methodName)){
            System.out.println("----------------用户行为记录 start----------------");
            System.out.println(now +"    用户【" + args[0] + "】搜索了关键词【"+ args[1] + "】" );
            System.out.println("----------------用户行为记录 end----------------");
        }else if("login".equals(methodName)){
            System.out.println("----------------用户行为记录 start----------------");
            System.out.println(now + "    用户【"+ args[0] +"】 登录中" );
            System.out.println("----------------用户行为记录 end----------------");
        }else if("register".equals(methodName)){
            System.out.println("----------------用户行为记录 start----------------");
            System.out.println(now + "    用户【"+ args[0] +"】 请求注册..." );
            System.out.println("----------------用户行为记录 end----------------");
        }else{
            System.out.println("未知请求");
        }
    }



}
